import QQMapWX from '../../../lib/qqmap-wx-jssdk.min'
import Schema from 'async-validator'
import { reqAddress, reqUpdateAdress, reqAddressDetail } from '../../../api/address'

Page({
  // 页面的初始数据
  data: {
    name: '', //收货人
    phone: '', //手机号码
    provinceName: '', //省
    provinceCode: '', //省编码
    cityName: '', //市
    cityCode: '', //市编码
    districtName: '', //区
    districtCode: '', //市编码
    address: '', //详细地址
    fullAddress: '', //完整地址
    isDefault: false //是否默认地址 0不设置为默认地址 1为默认地址
  },

  // 保存收货地址
  async saveAddrssForm(event) {
    const { provinceName, cityName, districtName, address, isDefault } = this.data
    //组织参数 (完整地址 )
    const params = {
      ...this.data,
      fullAddress: provinceName + cityName + districtName + address,
      isDefault: isDefault === true ? 1 : 0
    }
    // console.log(params)

    const { valid } = await this.vaildatorAddress(params)

    //valid为false则验证失败
    if (!valid) return

    //验证成功
    const res = this.addressId ? await reqUpdateAdress(params) : await reqAddress(params)
    if (res.code === 200) {
      wx.navigateBack({
        success: () => {
          wx.toast({
            title: this.addressId ? '更新地址成功' : '新增地址成功'
          })
        }
      })

      //提示
    }
  },

  //校验收货地址参数进行验证
  vaildatorAddress(params) {
    // 验证收货人，是否只包含大小写字母、数字和中文字符
    const nameRegExp = '^[a-zA-Z\\d\\u4e00-\\u9fa5]+$'

    // 验证手机号，是否符合中国大陆手机号码的格式
    const phoneReg = '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'

    //创建验证规则
    const rules = {
      name: [
        {
          required: true,
          message: '请输入收货人姓名'
        },
        {
          pattern: nameRegExp,
          message: '收货人姓名不合法'
        }
      ],
      phone: [
        {
          required: true,
          message: '请输入收货人手机号'
        },
        {
          pattern: phoneReg,
          message: '收货人手机号不合法'
        }
      ],
      provinceName: {
        required: true,
        message: '请选择收货人所在地区'
      },
      address: {
        required: true,
        message: '请输入详细地址'
      }
    }

    //验证规则
    const vaildator = new Schema(rules)

    //调用实例方法对请求参数进行验证
    return new Promise((reslove) => {
      vaildator.validate(params, (errors) => {
        if (errors) {
          //如果验证失败 进行提示
          wx.toast({
            title: errors[0].message
          })
          reslove({ valid: false })
        } else {
          //验证成功
          reslove({ valid: true })
        }
      })
    })
  },

  // 省市区选择
  onAddressChange(event) {
    //解构省市区以及编码
    const [provinceName, cityName, districtName] = event.detail.value
    const [provinceCode, cityCode, districtCode] = event.detail.code
    this.setData({
      provinceName,
      cityName,
      districtName,
      provinceCode,
      cityCode,
      districtCode
    })
  },
  //获取用户地理位置信息
  async onLocation() {
    // wx.getLocation()
    // const res = await wx.getLocation()
    // console.log(res)

    //打开地图获取位置信息 wx.chooseLocation()
    //latitude经度, longitude 维度, name 搜索地点
    const { latitude, longitude, name } = await wx.chooseLocation()

    //通过reverseGeocoder 经纬度进行逆地址解析
    this.qqmapwx.reverseGeocoder({
      loaction: { latitude, longitude },
      success: (res) => {
        // console.log(res)
        //获取省市区  省市区编码
        const { adcode, province, city, district } = res.result.ad_info

        //获取街道 门牌(街道,门牌 可能为空)
        const { street, street_number } = res.result.address_component

        //获取标准地址
        const { standard_address } = res.result.formatted_addresses

        // console.log(standard_address)
        //对获取数据进行格式化
        //详细地址
        this.setData({
          provinceName: province,
          //如果是省 前两位有值 后四位是0
          provinceCode: adcode.replace(adcode.substring(2, 6), '0000'),
          cityName: city,
          //如果是市 前两位有值 后2位是0
          cityCode: adcode.replace(adcode.substring(4, 6), '00'),
          districtName: district,
          districtCode: 'adcode',

          //组值详细地址
          address: street + street_number + name,
          fullAddress: standard_address + name
        })
      }
    })
  },

  //用来处理更新地址页面
  async showAddressInfo(id) {
    //不更新
    if (!id) return

    //说明更新
    //方便使用id
    this.addressId = id

    //动态设置特面标题
    wx.setNavigationBarTitle({
      title: '更新收货地址'
    })

    //调用接口API函数获取更新地址详情
    const { data } = await reqAddressDetail(id)
    this.setData(data)
  },

  onLoad(options) {
    this.qqmapwx = new QQMapWX({
      key: 'QWIBZ-RKMWL-6UFP3-EZW6R-6FMWV-EXB2R'
    })

    //调用方法实现更新
    this.showAddressInfo(options.id)
  }
})
